package sixth.匿名内部类;

interface A1 {
    public void printinfo();
}

class X1 {
    public void fun1() {
        this.fun2(new A1() {    //匿名内部类
            @Override
            public void printinfo() {   //实现接口中的抽象方法
                System.out.println("Hello Java！");
            }
        });
    }

    public void fun2(A1 a1) {// 接受接口实例
        a1.printinfo();     //调用接口方法
    }
}

public class 匿名内部类 {
    public static void main(String[] args) {
        new X1().fun1();    //实例化X类对象 并调用fun1()方法
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=58092:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 sixth.匿名内部类.匿名内部类
Hello Java！

Process finished with exit code 0
 */

/**
 * 上述程序中其实就是定义了一个匿名内部类
 * ①直接实例化接口对象   代码如下
 *    new A() {}
 *  此时，是直接为接口实例化的，前面的概念应该知道，接口本身是不能直接实例化的，所以在接口实例化之后要有一个大括号，用于实现接口中的抽象方法。
 *
 * ②实现抽象方法
 * new A1() {    //匿名内部类
 *             @Override
 *             public void printinfo() {   //实现接口中的抽象方法
 *                 System.out.println("Hello Java！");
 *             }
 *         }
 * 整个代码写完后 实际上也就是一个接口的实例化对象，里面的抽象方法也就实现了
 */